package ar.com.android.alco.forms;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import android.app.Activity;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import ar.com.android.alco.dbHelpers.SQLALCOHelper;
import ar.com.android.alco.entities.RegistroComidas;
import ar.com.android.alco.forms.R;
import ar.com.android.alco.providers.RegistroComidasProvider;

public class RegistroIngresoActivity extends Activity {
	private static final String TAG = "CargarRegistroActivity";
	
	public enum RegistroOpciones {
		DESAYUNO(0), MEDIA_MANNANA(1), ALMUERZO(2), MEDIA_TARDE(3), MERIENDA(4), CENA(5);
		private int code;
		RegistroOpciones(Integer code) {this.code = code;}
		public static RegistroOpciones valueOf(int itemId) {
			for (RegistroOpciones registroOpciones : RegistroOpciones.values()) {
                if (itemId == registroOpciones.code) 
                    return registroOpciones;
            } 
			return null;
		}
	}

	Spinner spRegistro;
	EditText etDia;
	TimePicker tpHora;
	EditText etDescripcion;
	EditText etCreditos;
	TextView tituloActivity;

    @Override
    public void onStart()
    {
    	super.onStart();
    }
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.registro_ingreso);
        
        Bundle bundle = getIntent().getExtras();
        
        tituloActivity = (TextView) findViewById(R.id.txtTitulo);
        spRegistro = (Spinner) findViewById(R.id.spRegistro);
        etDia = (EditText) findViewById(R.id.etDia);
        etDescripcion = (EditText) findViewById(R.id.etDescripcion);
        etCreditos = (EditText) findViewById(R.id.etCreditos);
        tpHora = (TimePicker) findViewById(R.id.tpHora);
        
        SpannableString title = new SpannableString(getString(R.string.Registro));
        title.setSpan(new UnderlineSpan(), 0, title.length(), 0);
        tituloActivity.setText(title);
        
        String fechaRegistro =  bundle.getString("fechaRegistro");
        etDia.setText(fechaRegistro);
        etDia.setEnabled(false);
        
    	//Populate Spinner
    	ArrayAdapter<CharSequence> adapterRegistro = ArrayAdapter.createFromResource(this, R.array.registro, android.R.layout.simple_spinner_item);
    	adapterRegistro.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    	spRegistro.setAdapter(adapterRegistro);
    	
    	spRegistro.setOnItemSelectedListener(new OnItemSelectedListener() {

			public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
				SQLALCOHelper sqlHelper = SQLALCOHelper.getHelper(RegistroIngresoActivity.this);
				sqlHelper.dbOpen();
				
				try
				{
					SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
					
					Integer idRegistro = null;
					
					RegistroComidasProvider registroComidasProvider = new RegistroComidasProvider(RegistroIngresoActivity.this);
					if(spRegistro.getSelectedItemId() == RegistroOpciones.DESAYUNO.code) {
						idRegistro = RegistroOpciones.DESAYUNO.code;
					}
					else if(spRegistro.getSelectedItemId() == RegistroOpciones.MEDIA_MANNANA.code) {
						idRegistro = RegistroOpciones.MEDIA_MANNANA.code;
					}
					else if(spRegistro.getSelectedItemId() == RegistroOpciones.ALMUERZO.code) {
						idRegistro = RegistroOpciones.ALMUERZO.code;
					}
					else if(spRegistro.getSelectedItemId() == RegistroOpciones.MEDIA_TARDE.code) {
						idRegistro = RegistroOpciones.MEDIA_TARDE.code;
					}
					else if(spRegistro.getSelectedItemId() == RegistroOpciones.MERIENDA.code) {
						idRegistro = RegistroOpciones.MERIENDA.code;
					}
					else if(spRegistro.getSelectedItemId() == RegistroOpciones.CENA.code) {
						idRegistro = RegistroOpciones.CENA.code;
					}
					
					RegistroComidas registroComidas = registroComidasProvider.getRegistroComidas(etDia.getText().toString(), idRegistro);
					
					if(registroComidas!=null) {
						String horaMinutos = sdf.format(registroComidas.getFechaHoraRegistro());
						
						//Populate Hora-Minuto
						tpHora.setCurrentHour(Integer.parseInt(horaMinutos.split(":")[0]));
						tpHora.setCurrentMinute(Integer.parseInt(horaMinutos.split(":")[1]));
						etDescripcion.setText(registroComidas.getDescripcion());
				        etCreditos.setText(registroComidas.getCreditos().toString());
					}
					else {
						Calendar c = Calendar.getInstance();
						int hour = c.get(Calendar.HOUR_OF_DAY);
						int minute = c.get(Calendar.MINUTE);
						
						tpHora.setCurrentHour(hour);
						tpHora.setCurrentMinute(minute);
						etDescripcion.setText("");
				        etCreditos.setText("");
					}
				}
				catch (Exception e) {
					Log.d(TAG, e.getMessage());
				}
				finally{
					sqlHelper.close();
				}
			}

			public void onNothingSelected(AdapterView<?> arg0) {}
		});
    }
    
    public void onClickGuardarDatos(View v) throws Exception
    {

    	SQLALCOHelper sqlHelper = SQLALCOHelper.getHelper(this);
    	
    	if(etDescripcion.getText().toString().equals("")) {
			LayoutInflater inflater = getLayoutInflater();
			View layout = inflater.inflate(R.drawable.toast_layout, (ViewGroup) findViewById(R.id.toast_layout_root));

			TextView text = (TextView) layout.findViewById(R.id.text);
			text.setText(getText(R.string.msgDescripcionRegistro));

			Toast toast = new Toast(getApplicationContext());
			toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
			toast.setDuration(Toast.LENGTH_LONG);
			toast.setView(layout);
			toast.show();
			
			etDescripcion.requestFocus();
    	}
    	else if(etCreditos.getText().toString().equals("")) {
    		LayoutInflater inflater = getLayoutInflater();
			View layout = inflater.inflate(R.drawable.toast_layout, (ViewGroup) findViewById(R.id.toast_layout_root));

			TextView text = (TextView) layout.findViewById(R.id.text);
			text.setText(getText(R.string.msgCreditosConsumidos));

			Toast toast = new Toast(getApplicationContext());
			toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
			toast.setDuration(Toast.LENGTH_LONG);
			toast.setView(layout);
			toast.show();
			
			etCreditos.requestFocus();
    	}
    	else
    	{
    		sqlHelper.dbOpen();
    		
    		try {
    			sqlHelper.beginTransaction();
    			
    			Integer idRegistro = null;
    			if(spRegistro.getSelectedItemId() == RegistroOpciones.DESAYUNO.code) {
					idRegistro = RegistroOpciones.DESAYUNO.code;
				}
				else if(spRegistro.getSelectedItemId() == RegistroOpciones.MEDIA_MANNANA.code) {
					idRegistro = RegistroOpciones.MEDIA_MANNANA.code;
				}
				else if(spRegistro.getSelectedItemId() == RegistroOpciones.ALMUERZO.code) {
					idRegistro = RegistroOpciones.ALMUERZO.code;
				}
				else if(spRegistro.getSelectedItemId() == RegistroOpciones.MEDIA_TARDE.code) {
					idRegistro = RegistroOpciones.MEDIA_TARDE.code;
				}
				else if(spRegistro.getSelectedItemId() == RegistroOpciones.MERIENDA.code) {
					idRegistro = RegistroOpciones.MERIENDA.code;
				}
				else if(spRegistro.getSelectedItemId() == RegistroOpciones.CENA.code) {
					idRegistro = RegistroOpciones.CENA.code;
				}
    			
    			RegistroComidasProvider registroComidasProvider = new RegistroComidasProvider(RegistroIngresoActivity.this);
    			RegistroComidas registroComidas = registroComidasProvider.getRegistroComidas(etDia.getText().toString(), idRegistro);
				
				if(registroComidas!=null) {
					registroComidas.setDescripcion(etDescripcion.getText().toString());
					registroComidas.setCreditos(Double.parseDouble(etCreditos.getText().toString()));
					
					String fechaHora = etDia.getText() + " " + tpHora.getCurrentHour() + ":" + tpHora.getCurrentMinute();
					SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
					registroComidas.setFechaHoraRegistro(sdf.parse(fechaHora));
					
					registroComidasProvider.updateRegistroComidas(registroComidas);
				}
				else {
					registroComidas = new RegistroComidas();
					registroComidas.setIdRegistro(idRegistro);
					registroComidas.setDescripcion(etDescripcion.getText().toString());
					registroComidas.setCreditos(Double.parseDouble(etCreditos.getText().toString()));
					
					String fechaHora = etDia.getText() + " " + tpHora.getCurrentHour() + ":" + tpHora.getCurrentMinute();
					SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
					registroComidas.setFechaHoraRegistro(sdf.parse(fechaHora));
					
					registroComidasProvider.insertRegistroComidas(registroComidas);
				}

    			sqlHelper.commitTransaction();
    			
    			LayoutInflater inflater = getLayoutInflater();
    			View layout = inflater.inflate(R.drawable.toast_layout, (ViewGroup) findViewById(R.id.toast_layout_root));

    			TextView text = (TextView) layout.findViewById(R.id.text);
    			text.setText(getText(R.string.msgSaveOKRegistro));

    			Toast toast = new Toast(getApplicationContext());
    			toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
    			toast.setDuration(Toast.LENGTH_LONG);
    			toast.setView(layout);
    			toast.show();
				
			} catch (Exception e) {
    			sqlHelper.rollbackTransaction();
				Log.e(TAG, e.toString());
			}
	    	finally {
	    		sqlHelper.dbClose();
	    	}
    	}
    }
}